package ar.com.sistventa.dao.impl;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import ar.com.sistventa.dao.ProveedorDAO;
import ar.com.sistventa.entities.Articulo;
import ar.com.sistventa.entities.Proveedor;
import ar.com.sistventa.filtros.ProveedorFiltroBusqueda;
import ar.com.sistventa.utils.Constantes;

public class ProveedorDAOImpl extends EntidadDAOImpl<Proveedor> implements
		ProveedorDAO {

	@SuppressWarnings("unchecked")
	@Override
	public List<Proveedor> busquedaPorFiltro(
			ProveedorFiltroBusqueda proveedorFiltroBusqueda)
			throws HibernateException {

		List<Proveedor> proveedorList = new ArrayList<Proveedor>();
		try {
			iniciaConexion();
			Criteria criteria = getSession().createCriteria(Articulo.class);

			if (proveedorFiltroBusqueda.getCodigo() != null
					&& !proveedorFiltroBusqueda.getCodigo().trim().isEmpty()) {
				criteria.add(Restrictions.eq("codigo",
						proveedorFiltroBusqueda.getCodigo()));

			}
			if (proveedorFiltroBusqueda.getRazonSocial() != null
					&& !proveedorFiltroBusqueda.getRazonSocial().trim()
							.isEmpty()) {
				criteria.add(Restrictions.like("razonSocial",
						proveedorFiltroBusqueda.getRazonSocial() + "%"));

			}

			criteria.add(Restrictions.eq("estadoLogico", "A"));
			criteria.addOrder(Order.asc("razonSocial"));
			proveedorList = (List<Proveedor>) criteria.list();

		} catch (HibernateException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			this.getSession().close();
		}
		return proveedorList;
	}

	@Override
	public void bajaLogicaProveedor(Proveedor proveedor)
			throws HibernateException {
		proveedor.setEstadoLogico(Constantes.BAJA);
		actualizar(proveedor);

	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Proveedor> getAllProveedor() throws HibernateException {
		List<Proveedor> proveedores = getAll(Proveedor.class);

		try {
			iniciaConexion();
			Criteria criteria = getSession().createCriteria(Proveedor.class);
			criteria.add(Restrictions.eq("estadoLogico", "A"));
			criteria.addOrder(Order.asc("razonSocial"));
			proveedores = (List<Proveedor>) criteria.list();

		} catch (Exception e) {
			logger.error("Error en " + getClass());
		} finally {
			this.getSession().close();
		}

		return proveedores;
	}

}
